질의어는 사용자가 데이터베이스에 존재하는 데이터를 요구하기 위해 사용하는 언어이다. 질의어의 종류는 다양하나 데이터베이스에서 가장 널리 이용되고 있는 질의어는 SQL이다. SQL은 표준 언어로서 거의 모든 DBMS에서 지원하고 있으며, 벤더별로 상이한 부분도 있지만 대부분의 관계형 데이터베이스에서 ANSI/ISO 표준을 최대한 따르고 있다.
SQL 문장의 3단계 처리과정
Parse 단계: SQL문법 및 사용자의 보안/권한을 체크하며 가장 빠른 Execution Plan을 찾는다.
Execute 단계: SQL문장을 실행한다.
Fetch 단계: 실행 결과에 의한 결과 데이터를 전달한다.
DDL(Data Definition Language)
DDL은 데이터베이스에 저장될 수 있는 데이터들을 정의하는 언어이다. Oracle에서는 DDL 문장 수행 후 자동으로 커밋을 수행하는 반면 SQL Server는 자동 커밋을 수행하지 않는다.
/* RENAME COLUMN */ ALTERTABLE PLAYER RENAMECOLUMN PLAYER_ID TO TEMP_ID;
DROP
SCHEMA, DOMAIN, TABLE, VIEW, INDEX를 삭제한다.
CASCADE CONSTRAINT 옵션은 해당 테이블과 관계가 있었던 참조제약조건의 삭제를 의미한다.
DROPTABLE PLAYER [CASCADECONSTRAINT];
TRUNCATE
테이블은 유지되며 해당 테이블의 모든 레코드가 삭제된다. (정상적인 복구 불가)
기능이 DELETE와 유사하지만 자동 커밋 특성 등 내부처리방식이 다르며, DELETE보다는 TRUNCATE의 시스템 부하가 더 적다.
TRUNCATETABLE TEAM;
RENAME
테이블의 이름을 변경할 수 있다.
RENAME TEAM TO TEAM_BACKUP; RENAME TEAM_BACKUP TO TEAM;
DML(Data Manipulation Language)
DML은 테이블에 저장된 데이터들을 조작하는데 필요한 언어이다. Oracle은 DML 문장 수행 후 사용자가 임의로 커밋 혹은 롤백을 처리해야 트랜잭션이 종료된다. 반면 SQL Server는 기본적으로 자동 커밋 모드이기 때문에 사용자가 커밋이나 롤백을 처리할 필요가 없다.
/* GRANT STH TO USER */ GRANTCREATEUSERTO SCOTT; -- SCOTT 사용자에게 유저생성 권한을 부여한다. GRANTCREATESESSIONTO SHM; -- SHM 사용자가 로그인할 수 있도록 세션권한을 부여한다. GRANTCREATETABLETO SHM; -- SHM 사용자에게 CREATE TABLE 권한을 부여한다.
REVOKE
데이터베이스 사용자의 사용권한을 취소한다.
/* REVOKE STH FROM USER */ REVOKECREATESESSION, CREATETABLEFROM SHM;
ROLE
데이터베이스 관리자는 ROLE을 생성하고, ROLE에 각종 권한들을 부여한 후 ROLE을 다른 ROLE이나 유저에게 부여할 수 있다.
ROLE에는 시스템 권한과 객체(OBJECT) 권한을 모두 부여할 수 있다.
권한을 직접 부여하는 것보다 ROLE을 사용하는 것이 빠르고 안전하게 사용자를 관리할 수 있는 방법이다.
CREATEROLE TEMP_ROLE; GRANTCREATESESSION, CREATETABLETO TEMP_ROLE; GRANT TEMP_ROLE TO SHM;
TCL(Transaction Control Language)
TCL은 DML에 의한 결과를 트랜잭션 별로 제어하는 명령어를 말한다. 일부에서는 DCL로 분류하기도 하지만, 성격이 다소 다르므로 별도 그룹으로 분리하는 것이 맞다.